{"id":1302,"date":"2018-06-06T00:03:36","date_gmt":"2018-06-06T00:03:36","guid":{"rendered":"https:\/\/blogs.autodesk.com\/latam\/?p=1302"},"modified":"2018-06-06T16:47:03","modified_gmt":"2018-06-06T16:47:03","slug":"descubre-el-poder-de-dynamo-al-automatizar-la-colocacion-de-una-familia-de-rociadores-en-un-modelo-revit","status":"publish","type":"post","link":"https:\/\/blogs.autodesk.com\/latam\/2018\/06\/06\/descubre-el-poder-de-dynamo-al-automatizar-la-colocacion-de-una-familia-de-rociadores-en-un-modelo-revit\/","title":{"rendered":"Descubre el Poder de Dynamo al automatizar la colocaci\u00f3n de una familia de Rociadores en un modelo Revit"},"content":{"rendered":"<p>Estamos agradecidos de contar con usuarios y clientes que quieren compartir su conocimiento.<\/p>\n<p>El d\u00eda de hoy tenemos el agrado de publicar un articulo creado por el Ingeniero Qu\u00edmico Alejandro Pel\u00e1ez De Lee, quien como usuario de Revit y Dynamo quiso compartir con todos c\u00f3mo logr\u00f3 automatizar la colocaci\u00f3n de rociadores en sus modelos BIM a trav\u00e9s de Dynamo.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1303 alignleft\" src=\"https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/Users_apelaezdelee_PortraitUrl_100.jpg\" alt=\"\" width=\"124\" height=\"124\" \/>Veamos su paso\u00a0a paso:<\/p>\n<p>Dynamo-Revit es un lenguaje de programaci\u00f3n visual, sencillo e intuitivo de utilizar que adem\u00e1s cuenta con un bloque de programaci\u00f3n Python. Dynamo permite personalizar a Revit, por ejemplo para automatizar acciones repetitivas de los dise\u00f1adores MEP (Mechanical, Electrical, Plumbing). El \u00fanico pre-requisito para aprovechar Dynamo es entender c\u00f3mo funcionan las familias MEP, (conectores, tipos de sistemas, tipos de par\u00e1metros, etc.) al modelar cualquier proyecto en Revit.<\/p>\n<p>El siguiente \u00ab<em><strong>workflow<\/strong><\/em>\u00bb nos muestra el poder de Dynamo al colocar una familia de rociadores tipo \u00ab<em><strong>pendent<\/strong><\/em>\u00bb (el ejemplo no sigue ninguna norma de ubicaci\u00f3n, ni de cantidad de rociadores, bajo NFPA u otro est\u00e1ndar), en un cielo raso con bloques de Dynamo utilizando la opci\u00f3n de <em><strong>lacing.<\/strong><\/em><\/p>\n<p>Paso 1.<\/p>\n<p>Crear una familia sencilla (en este ejemplo no vamos a parametrizar las dimensiones del rociador, ni modificar su apariencia en las \u00ab<em><strong>views<\/strong><\/em>\u00ab, ni tampoco agregar un factor de p\u00e9rdida de presi\u00f3n, etc.) de rociadores que NO sea <em><strong>family hosted<\/strong><\/em>, por ejemplo puede ser una familia de categor\u00eda <em><strong>Family Category, Fitting<\/strong><\/em>. Esto permite que los rociadores se puedan ubicar a la altura que el dise\u00f1ador necesita.<\/p>\n<p>Se le deja un conector tipo \u00abpipe\u00bb en la parte inferior de la extrusi\u00f3n (es un rociador pendent), asociado al par\u00e1metro tipo <strong><em>Family<\/em><\/strong> por nombre <strong>Di\u00e1metro<\/strong>. Al finalizar estos pasos se debe cargar (<em><strong>load<\/strong><\/em>) la familia en nuestro proyecto de Revit.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1304\" src=\"https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/family-category-300x161.png\" alt=\"\" width=\"527\" height=\"283\" srcset=\"https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/family-category-300x161.png 300w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/family-category-768x413.png 768w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/family-category-1024x550.png 1024w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/family-category.png 1920w\" sizes=\"auto, (max-width: 527px) 100vw, 527px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1305\" src=\"https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/parameter-properties-diametro-300x160.png\" alt=\"\" width=\"527\" height=\"281\" srcset=\"https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/parameter-properties-diametro-300x160.png 300w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/parameter-properties-diametro-768x410.png 768w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/parameter-properties-diametro-1024x546.png 1024w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/parameter-properties-diametro.png 1800w\" sizes=\"auto, (max-width: 527px) 100vw, 527px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Paso 2.<\/p>\n<p>Ejecutar Dynamo en Revit, Manage&gt;Dynamo.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1315\" src=\"https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/ejecutar-dynamo-final-300x161.png\" alt=\"\" width=\"581\" height=\"312\" srcset=\"https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/ejecutar-dynamo-final-300x161.png 300w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/ejecutar-dynamo-final-768x412.png 768w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/ejecutar-dynamo-final-1024x549.png 1024w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/ejecutar-dynamo-final.png 1924w\" sizes=\"auto, (max-width: 581px) 100vw, 581px\" \/><\/p>\n<p>Pasar de <em><strong>Automatic<\/strong><\/em> a modo <strong><em>Manual<\/em> <\/strong>en Dynamo. Buscar en \u00ab<em><strong>Search<\/strong><\/em>\u00bb y darle click a los bloques <em><strong>Out of the Box (OOTB)<\/strong> <\/em>de programaci\u00f3n que vamos a utilizar desde Dynamo:<\/p>\n<ul>\n<li><em><strong>Range<\/strong><\/em><\/li>\n<li><em><strong>Number<\/strong><\/em><\/li>\n<li><em><strong> Point.ByCoordinates<\/strong><\/em><\/li>\n<li><em><strong>Family Types<\/strong><\/em><\/li>\n<li><em><strong> FamilyInstance.ByPoint.<\/strong><\/em><\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1307\" src=\"https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/bloques-programacion-final-dynamo-300x171.png\" alt=\"\" width=\"582\" height=\"332\" srcset=\"https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/bloques-programacion-final-dynamo-300x171.png 300w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/bloques-programacion-final-dynamo-768x437.png 768w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/bloques-programacion-final-dynamo-1024x582.png 1024w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/bloques-programacion-final-dynamo.png 1920w\" sizes=\"auto, (max-width: 582px) 100vw, 582px\" \/><\/p>\n<p>Para introducirlos a los conceptos de Dynamo y sus bloques, hay que tener en cuenta que los bloques de programaci\u00f3n de Dynamo realizan una de tres funciones:<\/p>\n<ol>\n<li>Buscar informaci\u00f3n<\/li>\n<li>Ejecutar alg\u00fan c\u00e1lculo con los datos suministrados o<\/li>\n<li>Cambiar el modelo de Revit.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p>Entonces antes de arrancar con Dynamo y sus bloques de programaci\u00f3n es necesario entender los tipos de funciones que ejecutar\u00e1n los bloques que utilizaremos en este ejercicio ejemplo:<\/p>\n<p>El bloque <em><strong>Family Types<\/strong><\/em> busca la familia que acabamos de ingresar a nuestro proyecto.\u00a0\u00a0Los bloques de <em><strong>Number<\/strong> <\/em>ingresan valores num\u00e9ricos al bloque <em><strong>Range.<\/strong><\/em>\u00a0El bloque\u00a0<em><strong>Point.ByCoordinates<\/strong><\/em> re\u00fane el rango de coordenadas x,y,z en el modelo. y el bloque\u00a0<strong><em>FamilyInstance.ByPoint<\/em><\/strong> modifica el modelo de Revit cuando coloca los rociadores.<\/p>\n<p>El bloque <em><strong>Range<\/strong><\/em> tiene tres par\u00e1metros: <em><strong>start<\/strong><\/em>, <em><strong>end<\/strong><\/em> y <em><strong>step<\/strong><\/em>. Por default <em><strong>start<\/strong> <\/em>es 0 (cero), <em><strong>end<\/strong><\/em> es 10 (diez) y <em><strong>step<\/strong><\/em> es 1 (uno). Le damos clic al punto donde aparece el c\u00edrculo rojo del bloque que queremos ver, cuando aparezca la <strong>lista<\/strong> de valores le damos clic al pin. El resultado es una <strong>lista<\/strong> de 10 n\u00fameros entre el 0 y el 9. Por default, el bloque <em><strong>Point.ByCoordinates<\/strong><\/em> ubica sus tres par\u00e1metros x,y,z en un plano cartesiano, si lo que se le alimenta a sus par\u00e1metros son <strong>listas<\/strong> de n\u00fameros dicho bloque arrojar\u00e1 tambi\u00e9n listas de puntos. Su coordenada default es el origen de las coordenadas cartesianas (0,0,0). El bloque <em><strong>Family Instance.ByPoint<\/strong><\/em> colocar\u00e1 el <em><strong>FamilyType<\/strong><\/em> (nuestro Rociador) en el punto 0 (cero) en la lista de puntos cartesianos que le digamos.<\/p>\n<p>&nbsp;<\/p>\n<p>Paso 3.<\/p>\n<p>Conectar los bloques de programaci\u00f3n entre s\u00ed con sus \u00ab<em><strong>wires<\/strong><\/em>\u00ab, que son las l\u00edneas que est\u00e1n entre los bloques. Para usar los \u00ab<em><strong>wires<\/strong><\/em>\u00bb darle click al cuadrado de la derecha del bloque desde donde sale la informaci\u00f3n y extenderlo hasta la parte izquierda del bloque a donde se lleva la informaci\u00f3n. En Dynamo, los datos se mueven de izquierda a derecha. Dar click a <strong><em>Run<\/em><\/strong>. N\u00f3tese los valores que le damos a los par\u00e1metros de <strong><em>Range<\/em><\/strong> y c\u00f3mo funciona este bloque de programaci\u00f3n. El bloque de <em><strong>Range<\/strong><\/em> que ingresa a la coordenada \u00ab<strong>y<\/strong>\u00bb arranca en -9, termina en 18 y sube con<em><strong> step 1<\/strong><\/em>, entrega una lista con 28 n\u00fameros. El bloque que ingresa a la coordenada \u00abx\u00bb hace lo mismo pero con un rango entre -9 y 10, sube con<em><strong> step 1<\/strong><\/em>, y entrega una lista con 20 n\u00fameros. Dichas coordenadas se ven como una secuencia de puntos en la pantalla de Dynamo a la derecha de los bloques.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1308\" src=\"https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/conectando-los-wires-300x167.png\" alt=\"\" width=\"519\" height=\"289\" srcset=\"https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/conectando-los-wires-300x167.png 300w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/conectando-los-wires-768x428.png 768w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/conectando-los-wires-1024x571.png 1024w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/conectando-los-wires.png 1936w\" sizes=\"auto, (max-width: 519px) 100vw, 519px\" \/><\/p>\n<p><em><strong>Point.ByCoordinates<\/strong><\/em> empareja las coordenadas x,y de las dos <strong>listas<\/strong> provenientes de los dos bloques <strong><em>Range<\/em> <\/strong>que alimentan sus par\u00e1metros x, y, respectivamente: El bloque junta el 9 de la coordenada <strong>\u201cx\u201d<\/strong> con el 9 de la coordenada \u00ab<strong>y<\/strong>\u00ab, el 8 de la coordenada \u00ab<strong>x<\/strong>\u00bb con el 8 de la coordenada \u00ab<strong>y<\/strong>\u00ab; y as\u00ed sucesivamente. Por default el par\u00e1metro <em><strong>lacing<\/strong><\/em> de<em><strong> Point.ByCoordinates<\/strong><\/em> limita el resultado con la <strong>lista<\/strong> m\u00e1s corta; es decir la <strong>lista<\/strong> de 20 valores que ingresan a su coordenada <strong>\u00abx\u00bb.<\/strong> La altura o coordenada <strong>\u00abz\u00bb<\/strong> es un valor constante, 4. Para poder ver el par\u00e1metro de <em><strong>lacing<\/strong><\/em> hay que dar clic derecho al bloque <em><strong>Point.ByCoordinates.<\/strong> <\/em><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1309\" src=\"https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/lacing-shortes-300x167.png\" alt=\"\" width=\"523\" height=\"291\" srcset=\"https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/lacing-shortes-300x167.png 300w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/lacing-shortes-768x428.png 768w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/lacing-shortes-1024x571.png 1024w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/lacing-shortes.png 1936w\" sizes=\"auto, (max-width: 523px) 100vw, 523px\" \/><\/p>\n<p>Paso 4.<\/p>\n<p>Supongamos que en este ejemplo el dise\u00f1ador realmente quiere tener una malla de rociadores que cubra uniformemente el cielo raso. Para lograr esto vamos a cambiar el <em><strong>lacing<\/strong><\/em> del bloque <em><strong>Point.ByCoordinates<\/strong><\/em> a <strong><em>Cross Product<\/em><\/strong>. Damos click derecho al bloque <em><strong>Point.ByCoordinates<\/strong><\/em> y seleccionamos esta opci\u00f3n, luego damos click a <em><strong>Run<\/strong><\/em>. <em><strong>Point.ByCoordinates<\/strong><\/em> va a combinar cada una de las coordenadas x,y entre s\u00ed; el resultado es una listado de 28 x 20 coordenadas, es decir una lista de 560 puntos. El bloque junta el 9 de la coordenada \u00abx\u00bb con el 9, 8, 7..18 de la coordenada \u00aby\u00bb; luego junta el 8 de la coordenada \u00abx\u00bb con el 9,8,7..18 de la coordenada \u00aby\u00bb y as\u00ed sucesivamente. El bloque <strong><em>Point.ByCoordinates<\/em><\/strong> tiene el s\u00edmbolo<em><strong> xxx<\/strong> <\/em>que significa <strong><em>cross product<\/em><\/strong>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1310\" src=\"https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/lacing-cross-product-300x167.png\" alt=\"\" width=\"562\" height=\"313\" srcset=\"https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/lacing-cross-product-300x167.png 300w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/lacing-cross-product-768x428.png 768w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/lacing-cross-product-1024x571.png 1024w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/lacing-cross-product.png 1936w\" sizes=\"auto, (max-width: 562px) 100vw, 562px\" \/><\/p>\n<p>Paso 5.<\/p>\n<p>Conectar las coordenadas y el <em><strong>Family Types<\/strong><\/em> (rociador) al bloque de<em><strong> FamilyInstance.ByPoint<\/strong><\/em> para que Dynamo ubique los rociadores en el proyecto de Revit. Darle click a <em><strong>Run<\/strong><\/em>. N\u00f3tese que se crean las 560 instancias de rociadores en el proyecto.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1311\" src=\"https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/codigo-completo-lacing-300x167.png\" alt=\"\" width=\"550\" height=\"306\" srcset=\"https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/codigo-completo-lacing-300x167.png 300w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/codigo-completo-lacing-768x428.png 768w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/codigo-completo-lacing-1024x571.png 1024w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/codigo-completo-lacing.png 1936w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1312\" src=\"https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/ubicacion-final-en-revit-300x169.png\" alt=\"\" width=\"554\" height=\"312\" srcset=\"https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/ubicacion-final-en-revit-300x169.png 300w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/ubicacion-final-en-revit-768x433.png 768w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/ubicacion-final-en-revit-1024x577.png 1024w, https:\/\/blogs.autodesk.com\/latam\/wp-content\/uploads\/sites\/104\/2018\/06\/ubicacion-final-en-revit.png 1852w\" sizes=\"auto, (max-width: 554px) 100vw, 554px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Algunos enlaces referentes al tema:<\/p>\n<p><a href=\"http:\/\/primer.dynamobim.org\/en\/\">About Dynamo Primer<\/a><\/p>\n<p><a href=\"http:\/\/dynamobim.org\/\">Descargar Dynamo\u00a0<\/a><\/p>\n<p><a href=\"https:\/\/latinoamerica.autodesk.com\/collections\/architecture-engineering-construction\/included-software\">Revit y Dynamo \u00bfC\u00f3mo lo obtengo?<\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Estamos agradecidos de contar con usuarios y clientes que quieren compartir su conocimiento.<\/p>\n<p>El d\u00eda de hoy tenemos el agrado de publicar un articulo creado por el Ingeniero Qu\u00edmico Alejandro Pel\u00e1ez De Lee, quien como usuario de Revit y Dynamo quiso compartir con todos c\u00f3mo logr\u00f3 automatizar la colocaci\u00f3n de rociadores en sus modelos BIM a trav\u00e9s de Dynamo.<\/p>\n","protected":false},"author":730,"featured_media":1314,"comment_status":"open","ping_status":"open","sticky":true,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[102],"tags":[138,190,93,185],"class_list":["post-1302","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aec","tag-dynamo","tag-mep","tag-revit","tag-revit-mep"],"acf":[],"_links":{"self":[{"href":"https:\/\/blogs.autodesk.com\/latam\/wp-json\/wp\/v2\/posts\/1302","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.autodesk.com\/latam\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.autodesk.com\/latam\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.autodesk.com\/latam\/wp-json\/wp\/v2\/users\/730"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.autodesk.com\/latam\/wp-json\/wp\/v2\/comments?post=1302"}],"version-history":[{"count":0,"href":"https:\/\/blogs.autodesk.com\/latam\/wp-json\/wp\/v2\/posts\/1302\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.autodesk.com\/latam\/wp-json\/wp\/v2\/media\/1314"}],"wp:attachment":[{"href":"https:\/\/blogs.autodesk.com\/latam\/wp-json\/wp\/v2\/media?parent=1302"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.autodesk.com\/latam\/wp-json\/wp\/v2\/categories?post=1302"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.autodesk.com\/latam\/wp-json\/wp\/v2\/tags?post=1302"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}